
#include "gpio.h"
#include "f1c100s_gpio.h"
#include "f1c100s_intc.h"
#include "stdio.h"
void gpioe_irq_handle();

#define GPIOD_PORT_INIT ((GPIO_INIT_DEF *)(0x01C20800 + 0X200 + 0 * 0X20))
#define GPIOE_PORT_INIT ((GPIO_INIT_DEF *)(0x01C20800 + 0X200 + 1 * 0X20))
#define GPIOF_PORT_INIT ((GPIO_INIT_DEF *)(0x01C20800 + 0X200 + 2 * 0X20))

void gpioe_exit_init()
{
#if 1 
    gpio_init(GPIOE, PIN11, GPIO_MODE_AF6, GPIO_PULL_UP, GPIO_DRV_3); // PE12-EXTI.
    eint_pin_init(GPIOE_INT, 11, EINT_TRG_FALLING);
    eint_pin_enable(GPIOE_INT, 11);
    intc_enable_irq(IRQ_GPIOE);
    intc_set_irq_handler(IRQ_GPIOE, gpioe_irq_handle);
#else
    // pe11 外部中断输入 寄存器模式
#define PIN 11
    GPIOE_PORT->CFG1 &= ~((0x07 << ((PIN - 8) * 4)));
    GPIOE_PORT->CFG1 |= ((0x06 << ((PIN - 8) * 4))); // 0-input  1-output 6-EINT

    GPIOE_PORT->PUL0 &= ~(0X03 << (PIN * 2));
    GPIOE_PORT->PUL0 |= (0X01 << (PIN * 2)); // 0 PULL UP DOWN DISABLE  1 PULLUP  2 PULLDOWN  3 RESERVED

    GPIOE_PORT_INIT->INT_CFG1 &= ~(0x0f << ((PIN - 8) * 4));
    GPIOE_PORT_INIT->INT_CFG1 |= 0x01 << ((PIN - 8) * 4); // 0 上升沿  1 下降沿 2 高电平 3 低电平  4 上升沿和下降沿

    GPIOE_PORT_INIT->INT_CRTL |= 1 << PIN; // 0 DISABLE INT 1:ENABLE INT

    intc_enable_irq(IRQ_GPIOE);
    intc_set_irq_handler(IRQ_GPIOE, gpioe_irq_handle);
#endif
}

void gpioe_irq_handle()
{
    uint8_t eint_status = eint_pin_get_status(GPIOE_INT, 11);
    if (eint_status)
    {
        eint_pin_clear_status(GPIOE_INT, 11);
        printf("PE EXIT. %d\r\n", eint_status);
    }
}